package cn.iocoder.yudao.module.pay.service.walletwithdraw;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.pay.controller.admin.walletwithdraw.vo.PayWalletMetalWithdrawRespVO;
import cn.iocoder.yudao.module.pay.controller.admin.walletwithdraw.vo.PayWalletWithdrawCheckReqVO;
import cn.iocoder.yudao.module.pay.controller.admin.walletwithdraw.vo.PayWalletWithdrawPageReqVO;
import cn.iocoder.yudao.module.pay.controller.admin.walletwithdraw.vo.PayWalletWithdrawSaveReqVO;
import cn.iocoder.yudao.module.pay.dal.dataobject.walletwithdraw.PayWalletWithdrawDO;
import jakarta.validation.Valid;

import java.math.BigDecimal;

/**
 * 钱包提现 Service 接口
 *
 * @author FFFF
 */
public interface PayWalletWithdrawService {

    /**
     * 创建钱包提现
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createWalletWithdraw(@Valid PayWalletWithdrawSaveReqVO createReqVO);

    /**
     * 更新钱包提现
     *
     * @param updateReqVO 更新信息
     */
    void updateWalletWithdraw(@Valid PayWalletWithdrawSaveReqVO updateReqVO);

    /**
     * 删除钱包提现
     *
     * @param id 编号
     */
    void deleteWalletWithdraw(Long id);

    /**
     * 获得钱包提现
     *
     * @param id 编号
     * @return 钱包提现
     */
    PayWalletWithdrawDO getWalletWithdraw(Long id);

    /**
     * 获得钱包提现分页
     *
     * @param pageReqVO 分页查询
     * @return 钱包提现分页
     */
    PageResult<PayWalletWithdrawDO> getWalletWithdrawPage(PayWalletWithdrawPageReqVO pageReqVO);

    Boolean cancelWalletWithdraw(Long id);

    void checkWalletWithdraw(PayWalletWithdrawCheckReqVO updateReqVO);

    void createWithDrawBySystem(BigDecimal price, Long userId, String orderNo, String name, String bankId, String bankName, String bankAddress);

    PageResult<PayWalletMetalWithdrawRespVO> getWalletWithdrawPickupPage(PayWalletWithdrawPageReqVO pageReqVO);

}